package com.iandun.web.framework.core.utils.json;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;

import java.text.SimpleDateFormat;


/**
 * JSON序列化工具
 *
 * @author :jason.liang
 * @date: 2021-05-19 17:17
 */
@Slf4j
public class JsonMapper {

    public final static ObjectMapper jsonMapper = new ObjectMapper();

    /**
     * 配置该objectMapper在反序列化时，忽略目标对象没有的属性。
     * 凡是使用该objectMapper反序列化时，都会拥有该特性。
     */
    static {
        jsonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        jsonMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    }

    /**
     * JSON序列化
     *
     * @param obj 对象
     * @return JSON串
     */
    public static String writeValueAsString(Object obj) {
        try {
            return jsonMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            log.error("对象转json异常", e);
        }
        return null;
    }


    /**
     * json转 json tree
     *
     * @param json JSON串
     * @return 返回的节点对象
     */
    public static JsonNode readTree(String json) {
        try {
            return jsonMapper.readTree(json);
        } catch (JsonProcessingException e) {
            log.error("json转 jsonTree 异常", e);
        }
        return null;
    }

}
